/**
 * 给定N堆石子进行巴什博弈，问能否预先选定上限，使得先手必胜
 * 输出最大的满足条件的上限，如果可以无限大，输出-1，如果不存在，输出0
 * 首先求一个异或，如果先手本来就必胜，说明可以无限大，返回-1
 * 否则，说明此时异或和为0，先手必败
 * 然后统计一下石子的数量，相同数量的留一堆即可，注意此时异或和仍然为0
 * 如果石子数量两两相等，则先手不可能胜，返回0
 * 否则返回最大数量减一即可
 * 因为假设最大数量为c，则其余堆的数量异或结果必然为c
 * 又因为巴什博弈的先手必败点是 ai 是 m + 1 的倍数
 * 因此选择 c - 1 会使得最大堆的sg函数变为0，而其余堆的sg函数维持不变
 * 此时整个游戏的sg函数变为了c，先手必胜 
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;

int N;
vi A;

int proc(){
    int ans = 0;
    sort(A.begin(), A.end());
    for(auto i : A) ans ^= i;
    if(ans) return -1;

    map<int, int> yin;
    for(auto i : A) ++yin[i];

    int k = 0;
    for(const auto & p : yin)if(p.second & 1)A[k++] = p.first;

    if(0 == k) return 0;

    int tmp = A[k - 1] - 1;
    return tmp;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> N;
    A.assign(N, 0);
    for(auto & i : A) cin >> i;
    cout << proc() << endl;
    return 0;
}